import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import pandas as pd
#设定X向量
x = [[1],[2],[3],[4],[5]]
#设定Y向量
y = [[3.1],[5.2],[6.8],[8.8],[11.1]]
#创建线性回归模型
model = LinearRegression()
#使用X和Y进行拟合
model.fit(x, y)
#输出线性方程的斜率，即b的值
print(model.coef_)
#输出线性方程的截距，即a的值
print(model.intercept_)
#在x=6时，预测y的值
predicted = model.predict([[6]])[0]
#输出y的结果
print(predicted)
#启动一个新的图像实例
plt.figure()
#设置图像标题
plt.title('Linear Regression Demo')
#设定坐标轴的X轴和Y轴的标题
plt.xlabel('x')
plt.ylabel('y')
plt.axis([0, 8, 0, 20])
#设定网格开关为显示
plt.grid(True)
#绘制由X向量和Y向量构成的散点图，参数"k."中，其中k表示颜色为卡其色，点表示散点图
plt.plot(x, y, 'k.')
#绘制回归方程的直线，将x的范围设定为0到7，y的值由x进行计算
x1 = [[0],[1],[2],[3],[4],[5],[6],[7]]
y1 = model.predict(x1)
#绘制该直线，参数“g-”表示绘制时颜色选择绿色，-表示点与点直接使用实线连接
plt.plot(x1,y1,'g-')
#显示图像
plt.show()
#计算X方差
var_x = np.var([1,2,3,4,5], ddof=1)
#计算X和Y的协方差
cov = np.cov([1,2,3,4,5], [3.1,5.2,6.8,8.8,11.1])[0][1]
#协方差除以方差得到拟合方程的斜率
coef = cov/var_x

print("coef based on numpy:",end='')
print(coef)

#计算X的均值
mean_x = np.mean([1,2,3,4,5])
#计算Y的均值
mean_y = np.mean([3.1,5.2,6.8,8.8,11.1])
#根据公式计算截距
intercept = mean_y - coef * mean_x

print("intercept based on numpy:",end='')
print(intercept)